package com.jyl.data;

import java.util.function.Consumer;

public interface Tree<E extends Comparable<E>> {

    /**
     * 遍历顺序枚举
     */
    enum TRAVERSAL_ORDER {
        //前序
        PRE,

        //中序
        IN,

        //后序
        POST
    }

    /**
     * 用于查询二叉树节点总数
     *
     * @return 二叉树节点总数
     */
    int size();


    /**
     * 用于判断二叉树是否为空
     *
     * @return 是否为空
     */
    boolean isEmpty();

    /**
     * 向二叉搜索树中插入元素
     *
     * @param element 新元素
     */
    void add(E element);


    /**
     * 删除整棵树中的指定节点
     * @param element 待删除节点的值
     * @return 若删除成功，则返回被删除节点的值，否则(节点不存在),返回null
     */
    E remove(E element);

    /**
     * 前序遍历所有节点
     * 
     * @param consumer 对节点的处理函数
     */
    void forEach(Consumer<E> consumer);


    /**
     * 按照指定顺序遍所有节点
     * 
     * @param consumer 对节点的处理函数
     * @param order 遍历顺序
     */
    void forEach(Consumer<E> consumer, TRAVERSAL_ORDER order);

}